/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controlo;

import entidade.Moeda;
import entidade.Movimento;
import entidade.MovimentoDao;
import controlo.util.JsfUtil;
import sessao.MoedaFacade;
import sessao.MovimentoFacade;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import seguranca.Login;

/**
 *
 * @author bruno
 */
@ManagedBean(name = "movimentoBean")
@SessionScoped
public class MovimentoBean {

    @EJB
    private MoedaFacade moedaFacade;
    @EJB
    private MovimentoFacade movimentoFacade;
    
    private int codDoc, idMoeda, idMoeda2, idFuncionario, idConta2, idConta;
    private Date dataDoc;
    private String descr, tipoMov, tipoMov2;
    private double valorMov, valorMov2;
    private boolean conta2;
    private List<Moeda> moedas;
    
    /** Creates a new instance of MovimentoBean */
    public MovimentoBean() {
        
    }

    public String prepararRegistoMovimento() {    
        this.idMoeda = 0;
        this.idMoeda2 = 0;
        this.idFuncionario = 0;
        this.idConta2 = 0;
        this.idConta = 0;
        this.descr = "";
        this.valorMov = 0.0;
        this.valorMov2 = 0.0;        
        
        List<Movimento> fa = movimentoFacade.findAll();
        setCodDoc(fa.get(fa.size() - 1).getCodDocumento() + 1);
        setDataDoc(new Date());
        tipoMov="Credito";
        tipoMov2="Débito";
        conta2 = false;
        moedas = moedaFacade.findAll();
        
        return "registarMovimento";
    }

    public String registar(Login login) {
        
        try {
            this.setIdFuncionario(login.getIdLogin());
            
            if(this.conta2)
                new MovimentoDao().registarMovimentoDuplo(this);
            else
                new MovimentoDao().registarMovimentoUnico(this);
            
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("sucesso"));
         
            prepararRegistoMovimento();
            
        } catch (Exception ex) {
            Logger.getLogger(MovimentoBean.class.getName()).log(Level.SEVERE, null, ex);
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("erro"));
        }
        
        return "registarMovimento";
    }
    

    public double getValorMov2() {
        return valorMov2;
    }

    public void setValorMov2(double valorMov2) {
        this.valorMov2 = valorMov2;
    }

    public boolean isConta2() {
        return conta2;
    }

    public void setConta2(boolean conta2) {
        this.conta2 = conta2;
    }

    public int getIdConta2() {
        return idConta2;
    }

    public void setIdConta2(int idConta2) {
        this.idConta2 = idConta2;
    }

    public int getIdMoeda2() {
        return idMoeda2;
    }

    public void setIdMoeda2(int idMoeda2) {
        this.idMoeda2 = idMoeda2;
    }

    public String getTipoMov2() {
        return tipoMov2;
    }

    public void setTipoMov2(String tipoMov2) {
        this.tipoMov2 = tipoMov2;
    }

    public int getCodDoc() {
        return codDoc;
    }

    public void setCodDoc(int codDoc) {
        this.codDoc = codDoc;
    }

    public Date getDataDoc() {
        return dataDoc;
    }

    public void setDataDoc(Date dataDoc) {
        this.dataDoc = dataDoc;
    }

    public String getDescr() {
        return descr;
    }

    public void setDescr(String descr) {
        this.descr = descr;
    }

    public int getIdConta() {
        return idConta;
    }

    public void setIdConta(int idConta) {
        this.idConta = idConta;
    }

    public int getIdFuncionario() {
        return idFuncionario;
    }

    public void setIdFuncionario(int idFuncionario) {
        this.idFuncionario = idFuncionario;
    }

    public int getIdMoeda() {
        return idMoeda;
    }

    public void setIdMoeda(int idMoeda) {
        this.idMoeda = idMoeda;
    }

    public String getTipoMov() {
        return tipoMov;
    }

    public void setTipoMov(String tipoMov) {
        setTipoMov2(tipoMov.equalsIgnoreCase("Debito") ? "Crédito" : "Débito");
        this.tipoMov = tipoMov;
    }

    public double getValorMov() {
        return valorMov;
    }

    
    private float  getMoedaById(int id)
    {
    
      Iterator<Moeda> mi= moedas.iterator();
      Moeda m;
         while(mi.hasNext()){
             m=mi.next();
             if(m.getIdMoeda()==id)
                 return m.getCambioMoeda();
         }
         return 0f;
    }
    
    public void setValorMov(double valorMov) {
        float v1,v2;
        
        if (getIdMoeda() == getIdMoeda2()) {
            setValorMov2(valorMov);
        } else {
           v1=getMoedaById(getIdMoeda());
           v2=getMoedaById(getIdMoeda2());
           
            System.out.println("\n\nmoeda:"+ v1 + "\nid:" + getIdMoeda2() + "\ncambio:" + v2 );
            
            setValorMov2( (v2 * valorMov) / v1 );
        }
        this.valorMov = valorMov;
    }
}
